import math

import matplotlib.pyplot as plt  # matrix plot library
from numpy.matrixlib.defmatrix import matrix

from playLA.Matrix import Matrix

if __name__ == "__main__":

    ## 对点集进行绘制 - F 图形
    points = [[0,0] ,[0,5] , [3,5] , [3,4] , [1,4],
              [1,3] , [2,3] , [2,2] , [1,2] , [1,0]]
    ## 将points点集 拆乘 x y 两个分量 ， 横、纵坐标放在一个列表中
    x = [point[0] for point in points]
    y = [point[1] for point in points]

    plt.figure(figsize=(5,5))  ## 调整绘制窗口大小  , 单位英尺？英寸
    plt.xlim(-10  , 10)  ## x 坐标轴范围
    plt.ylim(-10  , 10)  ## y 坐标轴范围
    ## 参数  - 要绘制的 横纵坐标 - x,y
    plt.plot(x , y)
    # plt.show()


    ## 二维坐标列表放入矩阵中
    P = Matrix(points)
    ## 缩放矩阵 -  横坐标扩大2倍  ， 纵坐标扩大1.5
    # T = Matrix([[2,0] , [0,1.5]])
    ## 翻转变换矩阵
    # T = Matrix([[1,0] , [0,-1]])
    ## 错切 x
    # T = Matrix([[1,0.5] , [0 ,1]])

    ## 错切 y
    # T = Matrix([[1,0] , [0.5 ,1]])


    ## 旋转  - 通常 在数学库中 ， 对于旋转的角度 都是使用 弧度制  - 60° ->   Π/3
    theta  = math.pi / 3
    ## 图形沿着原点  顺时针旋转 theta 度
    T  = Matrix([[math.cos(theta) , math.sin(theta)] , [-math.sin(theta) , math.cos(theta)]])

    ## 矩阵乘法 乘点坐标 P需要转置 才能相乘
    P2 = T.dot(P.T())
    ## 直接分离 P2 的横纵坐标
    plt.plot([P2.col_vector(i)[0] for i in range(P2.col_num())] ,  ## 从列向量中取出 第i个列向量 ， 他的第0个分量 对应每个点的横坐标
             [P2.col_vector(i)[1] for i in range(P2.col_num())])  ## 从列向量中取出 第i个列向量 ， 他的第1个分量 对应每个点的纵坐标
    plt.show()



